package org.dxy.trigger.listener;

import lombok.RequiredArgsConstructor;
import org.dxy.domain.event.equipment.EquipmentStatusChangedEvent;
import org.dxy.infrastructure.persistent.po.EquipmentStatusSnapshotPo;
import org.dxy.infrastructure.persistent.repository.EquipmentStatusSnapshotRepository;
import org.springframework.stereotype.Component;
import com.google.common.eventbus.Subscribe;
import java.time.LocalDateTime;

/**
 * @description: 监听设备状态变更事件，并执行对应业务逻辑（如更新设备状态快照表）
 *              典型操作包括持久化设备当前状态、更新缓存等。
 * @author: dxy
 * @createTime: 2025/6/16
 */
@Component
@RequiredArgsConstructor
public class EquipmentStatusChangedEventListener implements EventListener<EquipmentStatusChangedEvent>{

    private final EquipmentStatusSnapshotRepository snapshotRepository; // 设备状态快照数据仓库

    /**
     * 处理设备状态变更事件
     * @param event 设备状态变更事件，包含设备ID、前后状态、位置、工单等信息
     */
    @Subscribe
    @Override
    public void onEvent(EquipmentStatusChangedEvent event) {
        // 1. 打印日志，方便追踪
        System.out.println("收到设备状态变更事件: " + event);

        // 2. 构造设备状态快照实体，准备持久化
        EquipmentStatusSnapshotPo snapshot = EquipmentStatusSnapshotPo.builder()
                .equipmentId(event.getEquipmentId())
                .status(event.getCurrentStatus())
                .previousStatus(event.getPreviousStatus())
                .workOrderId(event.getWorkOrderId())
                .position(event.getPosition())
                .lastUpdated(event.getChangedTime() != null ? event.getChangedTime() : LocalDateTime.now())
                .build();

        // 3. 持久化状态快照（如果是物化视图的话，也可以用更新逻辑）
//        snapshotRepository.saveOrUpdate(snapshot);

        // 4. 其它业务逻辑（如刷新缓存、推送通知等）可以在这里执行
    }


}
